package cn.edu.sdjzu.knoverse.service;

import cn.edu.sdjzu.knoverse.model.entity.kg.CourseNode;
import cn.edu.sdjzu.knoverse.model.entity.kg.UserNode;
import cn.edu.sdjzu.knoverse.model.vo.result.PageResult;

import java.util.List;
import java.util.Set;

public interface CourseService {
    
    /**
     * 创建课程
     */
    CourseNode createCourse(CourseNode course);

    /**
     * 更新课程
     */
    CourseNode updateCourse(CourseNode course);

    /**
     * 删除课程
     */
    void deleteCourse(Long id);

    /**
     * 获取课程
     */
    CourseNode getCourse(Long id);

    /**
     * 获取所有课程
     */
    List<CourseNode> getAllCourses();
    
    /**
     * 分页查询课程列表
     * @param name 课程名称
     * @param code 课程编码
     * @param description 课程描述
     * @param currentPage 当前页
     * @param pageSize 每页大小
     * @return 课程分页结果
     */
    PageResult<CourseNode> getCourseList(String name, String code, String description, Integer currentPage, Integer pageSize);

    /**
     * 更新课程的授权用户列表
     * @param courseId 课程ID
     * @param userIds 授权用户ID列表
     */
    void updateCourseAccess(Long courseId, List<Long> userIds);

    /**
     * 获取课程的所有访问权限列表
     */
    Set<UserNode> getCourseAccessList(Long courseId);
    
    /**
     * 更新课程的前置课程
     * @param courseId 课程ID
     * @param preCourseIds 前置课程ID列表
     */
    void updatePreCourses(Long courseId, List<Long> preCourseIds);
    
    /**
     * 获取课程的所有前置课程
     * @param courseId 课程ID
     * @return 前置课程列表
     */
    Set<CourseNode> getPreCourses(Long courseId);

    /**
     * 根据教师ID获取所教授的课程
     * @param teacherId 教师ID
     * @return 课程列表
     */
    List<CourseNode> getCoursesByTeacherId(Long teacherId);
} 